package com.iaz.tech.tools.ai.neuron.exec;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.iaz.tech.tools.ai.neuron.runtime.INeuronRuntimeAbility;
import com.iaz.tech.tools.uml.IUMLNeuronAble;
import com.iaz.tech.tools.uml.relationship.Relationship;
import com.iaz.tech.tools.uml.relationship.impl.NeuronAssociationsRelationship;

import lombok.Data;
import lombok.EqualsAndHashCode;

@EqualsAndHashCode(callSuper=false)
@Data
public class NeuronAssociationsCodeGenerator extends NeuronCodeGenerator {
    /**
     * 日志
     */
	private final static Logger logger = (Logger) LoggerFactory.getLogger(NeuronAssociationsCodeGenerator.class);
    
    public NeuronAssociationsCodeGenerator() {
        super();
    }

    public NeuronAssociationsCodeGenerator(INeuronRuntimeAbility runtime) {
        super();
        this.setRuntime(runtime);
    }
    /**
     * 生成关联代码
     * UML关联（Association）是类之间的一种基本关系，用于表示不同类之间的语义联系。以下是其核心要点：
     * 定义与类型
     * 关联表示两个或多个类之间的连接关系，可双向或单向，支持命名和角色分配。UML中关联分为四种类型：双向关联（无箭头）、
     * 单向关联（带箭头）、累积关联（Aggregation）和组合关联（Composition）。其中，累积和组合关联属于特殊类型的关联，
     * 用于描述整体与部分的关系。
     */
    @Override
    public Relationship toRelationship(IUMLNeuronAble uml) throws Exception {
        if (uml == null) {
            throw new IllegalArgumentException("uml不能为null");
        }
        if (!(uml instanceof NeuronAssociationsRelationship)){
            throw new IllegalArgumentException("uml必须为 NeuronAssociationsRelationship.");
        }
        return (NeuronAssociationsRelationship) uml;        
    }
}
